//加锁
lock:
    move $0, %al            //将 0 放入到寄存器中
    xchgb %al, mutex        //交换 寄存器中的0和mutex中的1    说明这个线程A拿走了锁。假设线程A拿到锁被切换了
                            //因为线程A拿走了上下文的数据，即拿走了锁。
                            //其他线程过来交换mutex，交换过来的mutex数据是0，申请锁失败，if判断挂起等待
                            //只有切换到线程A的时候，A拿到其上下文继续判断有无锁，if判断是1。执行其代码
    if(a1寄存器中内容 > 0)
        return 0; 
    else
        挂起等待;
    goto lock;
                            //线程A申请成功后锁一直在A的上下文中，只要A不归还锁，其他线程只能挂起等待
  
//解锁                   
unlock:
    move $1, mutex          //直接将1放回mutex即可。这样一来所有线程可以以相同逻辑再次去争抢锁
    唤醒等待mutex的线程;
    return 0;
    
//如果一个线程拿走了锁，其他线程其实也可以解锁
        